iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
DevOps

從零開始的DevOps猴!系列 第 5

Day05-容器間的共同小秘境(Volume/Bind Mount)

  • 分享至 

  • xImage
  •  

Container那麼獨立,沒有共同祕密嗎?

答案是有的唷! 透過Volume 與 Bind Mount,可以達到數據持久化儲存的需求(不然每次啟動都沒有先前的記憶了)。

  • 練習將以Volumn為主

重要概念

  1. Docker Volume的目的: 用於持久化數據和在容器間共享數據。
  2. Volume vs Bind Mount:
    • Volume是Docker管理的數據存儲
    • Bind Mount直接使用主機的文件系統
  3. Volume的生命週期: Volume獨立於容器,即使容器被刪除,Volume中的數據仍然存在。
  4. 數據安全: 使用Volume可以更安全地備份、遷移和管理數據。

Volumn常用指令

1. 創建Volume

docker volume create [OPTIONS] [VOLUME_NAME]

範例:

docker volume create my_volume

2. 列出所有Volume

docker volume ls [OPTIONS]

3. 檢查Volume詳情

docker volume inspect [OPTIONS] VOLUME [VOLUME...]

範例:

docker volume inspect my_volume

4. 刪除Volume

docker volume rm [OPTIONS] VOLUME [VOLUME...]

範例:

docker volume rm my_volume

實作截圖:

搭配GUI可以直接從Volumes頁籤看到你的指令結果
BasicCommand

BasicCommandRm

練習1:創建和使用基本Volume

目標: 創建一個Volume,將其掛載到一個容器中,然後在Volume中創建一個文件。

步驟:

  1. 創建一個新的Volume
  2. 運行一個容器,將該Volume掛載到容器的 /data 目錄
  3. 在容器內的 /data 目錄中創建一個文件
  4. 退出容器,然後啟動一個新容器,掛載同一個Volume
  5. 驗證在第一個容器中創建的文件是否存在

練習2:在多個容器間共享Volume

目標: 使用同一個Volume在兩個運行中的容器之間共享數據。

步驟:

  1. 創建一個新的Volume
  2. 運行兩個不同的容器(例如,一個運行 Nginx,一個運行 Ubuntu),將相同的Volume掛載到兩個容器中
  3. 在一個容器中創建一個文件
  4. 在另一個容器中驗證並修改該文件
  5. 確認兩個容器可以看到相同的更新後的文件

詳細指令過程

練習1

# 1. 創建一個新的Volume
docker volume create my_volume

# 2. 運行一個容器,將該Volume掛載到容器的 /data 目錄
docker run -it --name container1 -v my_volume:/data ubuntu /bin/bash

# 3. 在容器內的 /data 目錄中創建一個文件
# (在容器內執行)
echo "Hello from container1" > /data/test.txt
exit

# 4. 退出容器,然後啟動一個新容器,掛載同一個Volume
docker run -it --name container2 -v my_volume:/data ubuntu /bin/bash

# 5. 驗證在第一個容器中創建的文件是否存在
# (在新容器內執行)
cat /data/test.txt

實作截圖:

Container1跟Container2有共同秘密了!
Practice1Container

搭配GUI直接看到Volume真的直覺!
Practice1Volume

練習2:在多個容器間共享Volume

# 1. 創建一個新的Volume
docker volume create shared_volume

# 2. 運行兩個不同的容器,將相同的Volume掛載到兩個容器中
# 運行 Nginx 容器
docker run -d --name nginx_container -v shared_volume:/usr/shared/nginx/html nginx

# 運行 Ubuntu 容器
docker run -it --name ubuntu_container -v shared_volume:/shared_data ubuntu /bin/bash

# 3. 在 Ubuntu 容器中創建一個文件
# (在 Ubuntu 容器內執行)
echo "<h1>Hello from Ubuntu container</h1>" > /shared_data/index.html
exit

# 4. 在 Nginx 容器中驗證並修改該文件
docker exec -it nginx_container /bin/bash
# (在 Nginx 容器內執行)
cat /usr/share/nginx/html/index.html
echo "<h1>Updated in Nginx container</h1>" > /usr/shared/nginx/html/index.html
exit

# 5. 確認兩個容器可以看到相同的更新後的文件
# (在 Ubuntu 容器內執行)
cat /shared_data/index.html
exit

實作截圖:

建立Volume
Practice2Volume

Ubuntu容器-新增檔案(index.html)
Practice2UbuntuNewTxt

Nginx容器-觀察Ubuntu容器新增的檔案(index.html)
Practice2NginxSeeTxt

Nginx容器再次更新檔案 & Ubuntu觀察被更新的檔案
Practice2NginxUpdateTxt&amp;UbuntuSeeTxt

今天朋友的共同秘密就學到這邊!


上一篇
Day04-Docker容器隔離性
下一篇
Day06-利用Docker快速建置工作所需環境
系列文
從零開始的DevOps猴!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言